package Offer;

/**
 * @author lakersUp
 * @Classname   Offer19isMatch
 * @Description     正则表达式匹配
 * @Date 2022/2/28 19:29
 * @Version 1.0
 */
public class Offer19isMatch {
    public boolean isMatch(String s, String p) {
        int m=s.length();
        int n=p.length();
        boolean[][] dp=new boolean[m+1][n+1];
        //初始化,两者都是空的时候为true;
        dp[0][0]=true;
        for(int i=0;i<=m;i++){
            for(int j=1;i<=n;j++){
                if(p.charAt(j-1)=='*'){
                    //a*是一个整体,匹配多次与匹配零次
                    if(match(s,p,i,j-1)){
                        dp[i][j]=dp[i-1][j] || dp[i][j-2];
                    }else {
                        dp[i][j]=dp[i][j-2];
                    }

                }else {
                    if(match(s,p,i,j-1)){
                        dp[i][j]=dp[i-1][j-1];
                    }
                }
            }
        }
        return dp[m][n];
    }

    private boolean match(String s, String p, int i, int j) {
        if(i==0){
            return false;
        }
        if(p.charAt(j-1)=='.'){
            return true;
        }
        return s.charAt(i-1)==p.charAt(j-1);
    }
}
